//给你一个按 非递减顺序 排序的整数数组 nums，返回 每个数字的平方 组成的新数组，要求也按 非递减顺序 排序。 
//
// 
// 
//
// 
//
// 示例 1： 
//
// 
//输入：nums = [-4,-1,0,3,10]
//输出：[0,1,9,16,100]
//解释：平方后，数组变为 [16,1,0,9,100]
//排序后，数组变为 [0,1,9,16,100] 
//
// 示例 2： 
//
// 
//输入：nums = [-7,-3,2,3,11]
//输出：[4,9,9,49,121]
// 
//
// 
//
// 提示： 
//
// 
// 1 <= nums.length <= 104 
// -104 <= nums[i] <= 104 
// nums 已按 非递减顺序 排序 
// 
//
// 
//
// 进阶： 
//
// 
// 请你设计时间复杂度为 O(n) 的算法解决本问题 
// 
// Related Topics 数组 双指针 排序 
// 👍 307 👎 0


/*
 * Id：977
 * Name：有序数组的平方
 * Date：2021-09-24 17:13:31
 */
package leetcode.editor.cn;

public class SquaresOfASortedArray {
    public static void main(String[] args) {
        Solution solution = new SquaresOfASortedArray().new Solution();
        solution.sortedSquares(new int[]{-4, -1, 0, 3, 10});
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public int[] sortedSquares(int[] nums) {
            int x = 0, y = nums.length - 1;
            int[] ans = new int[nums.length];
            int k = ans.length - 1;
            while (x <= y) {
                int n;
                if (Math.abs(nums[x]) < Math.abs(nums[y])) {
                    n = (int) Math.pow(nums[y--], 2);
                } else {
                    n = (int) Math.pow(nums[x++], 2);
                }
                ans[k--] = n;
            }
            return ans;
        }
    }
//leetcode submit region end(Prohibit modification and deletion)
} 